/**
 * Created by wangkui on 2015/12/30.
 * 1.留言
 * 2.讨论
 */

var express = require('express');
var request = require('request');
var router = express.Router();
var config = require('./../config');
var async = require("async");
var bigpixelsrv = require('./bigpixelsrv');
//更新为redis数据缓存方式{2015-12-23 created by wangkui}
var CachemanRedis = require('cacheman-redis');
var cache = new CachemanRedis(config.cachestore);
//获取用户信息
function getUserInfo(userid,callback)
{
    var url = "/api/users/"+userid;
    var key='User_'+userid;
    cache.get(key,function(err,value){
        if(err|| value==undefined||value==''){
            bigpixelsrv.GetData(url,function(err,data){
                if(!err)
                {
                    var userinfo = {};
                    userinfo.userid = data._id;
                    userinfo.nickname = data.nickname;
                    if(data.hasOwnProperty('wechat'))
                    {
                        userinfo.sex = data.wechat.sex;
                    }
                    if(data.avatarId && data.avatarId.length > 0)
                    {
                        userinfo.headimgurl = config.UserAvatarPath + data.avatarId + "/96";
                    }
                    cache.set(key,userinfo,90*1000,function(err){
                        if(err){console.log(err);}
                    });
                    callback(userinfo);
                }
                else
                {
                    console.log(err);
                    callback();
                }
            })
        }else{
            callback(value);
        }
    });
}

//获取数据库中的留言数据
exports.getComments=function(req,res){
    try{
        var skip=req.query.skip || 0;
        var limit=req.query.limit || 10;
        var parentid = req.params.id || '';
        var subjectType = req.query.subjectType || 'comment';
        var panoid = req.query.panoid || '';
        var userid=req.query.userid || '';

        var url = "/api/comment/?skip="+skip+"&limit="+limit + "&userid="+userid + "&subjectType="+subjectType+"&panoid="+panoid+"&parentid="+parentid;
        var key='Comment'+'_'+panoid+'_'+parentid+'_'+userid+'_'+skip+'_'+limit+'_'+subjectType;
        cache.get(key,function(err,value){
            if(err|| value==undefined||value==''){
                bigpixelsrv.GetData(url,function(err,data){
                    cache.set(key,data,1000,function(err){
                        if(err){console.log(err);}
                    });

                    bigpixelsrv.respondData(res,err,data);
                })
            }
            else{
                bigpixelsrv.respondData(res,err,value);
            }
        });
    }catch(e){
        bigpixelsrv.handleGeneralError(res,e);
    }
}

//创建留言
//1.创建用户一对一（主叫与被叫）留言保存到数据库
//2.创建用户一对一（主叫与被叫）留言保存到缓存中
//3.创建用户缓存中未读数据
exports.createComment= function(req,res)
{
    try
    {
        var parentid=req.params.id;
        var body = req.body;
        body.subjectType = "comment";
        body.subjectId=parentid+'_'+body.userid;
        body.statue='0';
        //留言人
        getUserInfo(body.userid,function(user){
            if(user)
            {
                body.userinfo = JSON.stringify(user);
                delete body.userid;
                //被留言人
                getUserInfo(parentid,function(parent){
                    if(parent){
                        body.parentinfo = JSON.stringify(parent);
                        var posturl = "/api/comment/";
                        bigpixelsrv.PostData(posturl,body, function(error, data){
                            //body.redis='0'表示被叫方不在线或未与主叫方在线联系，需要保存缓存信息
                            if(body.redis=='0'){
                                //刷新未读留言缓存
                                updateunopencomment(JSON.parse(body.parentinfo),JSON.parse(body.userinfo),body.notes,function(value,err){
                                    if(err){
                                        console.log(err);
                                    }
                                    bigpixelsrv.respondData(res,err,value);
                                });
                            }else{
                                bigpixelsrv.respondData(res,error,data);
                            }
                        });
                    }
                    else{
                        throw new Error('用户信息没找到');
                    }
                });
            }
            else
            {
                throw new Error('用户信息没找到');
            }
        })
    }
    catch(e){
        bigpixelsrv.handleGeneralError(res,e);
    }
}

/*
更新未读留言数据
 * key结构："comment"_userid
 * value:数据结构
 * ttl:6个月
 * {parentid:parentid,count:count,data:[{commentdate:commentdate,notes:notes,userinfo:userinfo}]}
 */
var updateunopencomment=function(parentinfo,userinfo,notes,callback){
    var key ="comment_"+parentinfo.userid;//用户在缓存中存储的KEY
    var comment_key=parentinfo.userid+'_'+userinfo.userid;//被叫方ID_主叫方ID组成缓存KEY
    var count;//未读的留言数量
    var commentdate=new Date();//留言时间
    var data;
    cache.get(key,function(err,value){
        if(err|| value==undefined||value==''){
            count=1;
            data={
                parentinfo:parentinfo,
                count:count,
                data:[{
                    commentkey:comment_key,
                    count:1,
                    userinfo:userinfo
                }]
            };
            cache.set(key,data,180*24*60*60,function(err){
                if(err){console.log(err);}
                callback(data);
            });
        }else{
            count=parseInt(value.count)+1;
            value.count=count;

            var temp=[];
            var flag=false;
            async.forEachSeries(value.data,function(item,cb){
                var info={};
                if(item.commentkey==comment_key){
                    info={
                        commentkey:item.commentkey,
                        count:parseInt(item.count)+1,
                        userinfo:item.userinfo
                    };
                    flag=true;
                }else{
                    info={
                        commentkey:item.commentkey,
                        count:item.count,
                        userinfo:item.userinfo
                    };
                }
                temp.push(info);
                cb();
            },function(err){
                if(err){console.log(err)}
                //新增一条新的留言着留言
                if(flag==false){
                    info={
                        commentkey:comment_key,
                        count:1,
                        userinfo:userinfo
                    };
                    temp.push(info);
                }
                value.data=temp;
                cache.set(key,value,180*24*60*60,function(err){
                    if(err){console.log(err);}
                    callback(value);
                });
            })
        }
    });
}
//添加一条留言信息到redis中
var addcomment=function(commentkey,userinfo,parentinfo,commentvalue,callback){
    var count;//未读的留言数量
    var commentdate=new Date();//留言时间
    cache.get(commentkey,function(err,value){
        if(err|| value==undefined||value==''){
            count=1;
            data={
                parentinfo:parentinfo,
                userinfo:userinfo,
                count:count,
                data:[{
                    commentvalue:commentvalue,
                    commentdate:commentdate
                }]
            };
            cache.set(commentkey,data,180*24*60*60,function(err){
                if(err){console.log(err);}
                callback();
            });
        }else{
            count=parseInt(value.count)+1;
            value.count=count;

            var temp=[];
            async.forEachSeries(value,function(item,cb){
                var info={
                    commentvalue:item.commentvalue,
                    commentdate:item.commentdate
                };
                temp.push(info);
                cb();
            },function(err){
                if(err){console.log(err)}
                info={
                    commentvalue:commentvalue,
                    commentdate:commentdate
                };
                temp.push(info);
                cache.set(commentkey,value,180*24*60*60,function(err){
                    if(err){console.log(err);}
                    callback();
                });
            })
        }
    })
}

//修改评论状态
var updateCommentStatue=function(data,callback){

    callback();
}

//获取缓存中未读取的留言
exports.getRedisComments=function(req,res){
    try{
        var parentid=req.params.id;
        var key='comment_'+parentid;
        cache.get(key,function(err,value){
            if(err|| value==undefined||value==''){
                var info={
                    parentid:parentid,
                    count:0
                }
                bigpixelsrv.respondData(res,err,info);
            }else{
                bigpixelsrv.respondData(res,err,value);
            }
        })
    }
    catch(e){
        bigpixelsrv.handleGeneralError(res,e);
    }
}

//清空缓存中的留言数据
exports.cleanRedisComments=function(req,res){
    try{
        var parentid=req.params.id;
        var key='comment_'+parentid;
        cache.del(key,function(err){
            bigpixelsrv.respondData(res,err,'clean is ok');
        })
    }
    catch(e){
        bigpixelsrv.handleGeneralError(res,e);
    }
}



